// 1.引入axios
import axios from 'axios'
import qs from 'qs'
// 2.处理环境 判断当前是开发环境还是生产环境
/**
 * 开发环境:development
 * 生产环境: production
*/
let baseURL  = null;

if(process.env.NODE_ENV === 'development'){
    // baseURL = 'http://192.144.210.38:3001/api';//生产环境
    baseURL = 'http://localhost:3000/api';//开发环境
}else if(process.env.NODE_ENV === 'production'){
    // baseURL = 'http://192.144.210.38:3001/api';//生产环境
}

// 3.创建自定义axios
const instance = axios.create({
    baseURL,
    timeout:500,
})

// 4.设置请求拦截器
instance.interceptors.request.use(config=>{
    // 做统一处理操作  eg:请求头的设置
    if(config.url !== '/api/userlogin'){
        if(sessionStorage.getItem('user')){
            let user = JSON.parse(sessionStorage.getItem('user'))
            config.headers.authorization = user.token
        }
    }
    return config
})
// 5.设置响应拦截器
instance.interceptors.response.use(res=>{
    // 统一处理     eg:统一出下状态码为403,404,500等等错误信息
    return res
})
// 6.封装get方法
export function get(url,params =  null){
    /**
     * 实例化Promise
     * resolve:请求成功之后的执行函数
     * reject:请求失败之后的执行函数
    */
   return new Promise((resolve,reject)=>{
    instance.get(url,{params}).then(res=>{
        resolve(res.data)
    }).catch(err=>{
        reject(err)
    })
   })
}

// 封装post方法
export function post(url,params,isFile = false){
    // 对 表单提交的结果中没有文件的操作
    // 设置请求头
    let config = {
        headers:{
            "Content-Type":"application/x-www-form-urlencoded"
        }
    }
    // 对数据进行序列化操作
    let data = qs.stringify(params)

    // 处理表单结果中文件的操作
    if(isFile){
        // 设置请求头
        config = {
            headers:{
                "Content-Type":"multipart/form-data"
            }
        }
        // 对数据进行序列化操作
        data = new FormData();
        for(let i in params){
            data.append(i,params[i])
        }

    }
    // 返回Promise对象
    return new Promise((resolve,reject)=>{
        instance.post(url,data,config).then(res=>{
            resolve(res.data)
        }).catch(err=>{
            reject(err)
        })
    })
}